import express from "express";
import BookData from "./model.js";
import auth from "../token/auth.js";
import User from "../user/model.js";

const router = express.Router();

// 新增
router.post("/", auth, async (req, res) => {
  const { operatorId, ...data } = req.body;
  if (!operatorId) {
    return res.status(400).json({ error: "缺少操作者id" });
  }
  // 查询操作者身份
  const operator = await User.findById(operatorId);
  if (!operator || !["社长", "管理员"].includes(operator.position)) {
    return res.status(403).json({ error: "只有社长或管理员可以添加数据" });
  }
  try {
    const book = new BookData(data);
    await book.save();
    res.json({ message: "添加成功", book });
  } catch (err) {
    res.status(500).json({ error: "添加失败" });
  }
});

// 获取全部（按Layers降序排序）
router.get("/", async (req, res) => {
  try {
    const books = await BookData.find().sort({ Layers: -1 });
    res.json(books);
  } catch (err) {
    res.status(500).json({ error: "获取失败" });
  }
});

// 根据用户id查询所有
router.get("/user/:userId", auth, async (req, res) => {
  const { operatorId } = req.query;
  if (!operatorId) {
    return res.status(400).json({ error: "缺少操作者id" });
  }
  const operator = await User.findById(operatorId);
  if (!operator || !["社长", "管理员"].includes(operator.position)) {
    return res.status(403).json({ error: "只有社长或管理员可以获取数据" });
  }
  const { userId } = req.params;
  try {
    const books = await BookData.find({ userId });
    res.json(books);
  } catch (err) {
    res.status(500).json({ error: "查询失败" });
  }
});

// 获取单个
router.get("/:id", auth, async (req, res) => {
  const { operatorId } = req.query;
  if (!operatorId) {
    return res.status(400).json({ error: "缺少操作者id" });
  }
  const operator = await User.findById(operatorId);
  if (!operator || !["社长", "管理员"].includes(operator.position)) {
    return res.status(403).json({ error: "只有社长或管理员可以获取数据" });
  }
  try {
    const book = await BookData.findById(req.params.id);
    if (!book) {
      return res.status(404).json({ error: "数据不存在" });
    }
    res.json(book);
  } catch (err) {
    res.status(500).json({ error: "获取失败" });
  }
});

// 更新
router.put("/:id", auth, async (req, res) => {
  const { operatorId, ...updateFields } = req.body;
  if (!operatorId) {
    return res.status(400).json({ error: "缺少操作者id" });
  }
  const operator = await User.findById(operatorId);
  if (!operator || !["社长", "管理员"].includes(operator.position)) {
    return res.status(403).json({ error: "只有社长或管理员可以更新数据" });
  }
  try {
    const updated = await BookData.findByIdAndUpdate(
      req.params.id,
      updateFields,
      { new: true }
    );
    if (!updated) {
      return res.status(404).json({ error: "数据不存在" });
    }
    res.json({ message: "更新成功", book: updated });
  } catch (err) {
    res.status(500).json({ error: "更新失败" });
  }
});

// 删除
router.delete("/:id", auth, async (req, res) => {
  const { operatorId } = req.body;
  if (!operatorId) {
    return res.status(400).json({ error: "缺少操作者id" });
  }
  const operator = await User.findById(operatorId);
  if (!operator || !["社长", "管理员"].includes(operator.position)) {
    return res.status(403).json({ error: "只有社长或管理员可以删除数据" });
  }
  try {
    const deleted = await BookData.findByIdAndDelete(req.params.id);
    if (!deleted) {
      return res.status(404).json({ error: "数据不存在" });
    }
    res.json({ message: "删除成功" });
  } catch (err) {
    res.status(500).json({ error: "删除失败" });
  }
});

export default router;
